/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package managedBeans;

import controladores.ConsultarReservaCont;
import controladores.ModificarReservaCont;
import controladores.SolicitarReservaCont;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.component.UIViewRoot;
import javax.faces.context.FacesContext;
import org.apache.log4j.Logger;
import org.primefaces.component.datatable.DataTable;
import org.primefaces.component.inputtext.InputText;
import tools.Utilidad;

/**
 *
 * @author ricardo
 */
@ManagedBean
@ViewScoped
public class Reserva implements Serializable {

    private modelos.pojos.Reserva reserva;
    private DataTable tablaReservas;
    private Boolean noPermitirEdicion = true;
    private Boolean permitirBusqueda;
    private int index;
    private int indexC;
    protected Logger log = Logger.getLogger(Reserva.class);

    /** Creates a new instance of Cliente */
    public Reserva() {
        reserva = new modelos.pojos.Reserva();
        reserva.setCodigoReserva("Autogenerado");
        reserva.setFechaRealizacion(new Date());
        if(UserSession.tipoUsuario.equals("Cliente")){
            permitirBusqueda = true;
        } else{
            permitirBusqueda = false;
        }
    }

    public modelos.pojos.Reserva getReserva() {
        return reserva;
    }

    public void setReserva(modelos.pojos.Reserva reserva) {
        this.reserva = reserva;
    }

    public int getIndex() {
        return index;
    }

    public void setIndex(int index) {
        this.index = index;
    }

    public int getIndexC() {
        return indexC;
    }

    public void setIndexC(int indexC) {
        this.indexC = indexC;
    }

    public Boolean getNoPermitirEdicion() {
        return noPermitirEdicion;
    }

    public void setNoPermitirEdicion(Boolean noPermitirEdicion) {
        this.noPermitirEdicion = noPermitirEdicion;
    }

    public DataTable getTablaReservas() {
        return tablaReservas;
    }

    public void setTablaReservas(DataTable tablaReservas) {
        this.tablaReservas = tablaReservas;
    }

    public void irAtras() {
        indexC = 0;
    }

    public Boolean getPermitirBusqueda() {
        return permitirBusqueda;
    }

    public void setPermitirBusqueda(Boolean permitirBusqueda) {
        this.permitirBusqueda = permitirBusqueda;
    }   

    public void desbloquear() {
        this.noPermitirEdicion = false;
        FacesContext context = FacesContext.getCurrentInstance();
        context.addMessage(null, new FacesMessage("Campos Habilitados", "Ahora puede modificar la información"));
    }

    public void crearReserva() {
        FacesContext facesContext = FacesContext.getCurrentInstance();
        UIViewRoot root = facesContext.getViewRoot();
        InputText caja = (InputText) root.findComponent("este").findComponent("cedSolicitante");
        String cedulaSolicitante = caja.getValue() + "";
        reserva.setCodigoReserva(SolicitarReservaCont.generarCodigoReserva());
        SolicitarReservaCont.crearReserva(reserva, cedulaSolicitante);
        SolicitarReservaCont.actualizarContadorCodigos();
        index = 1;
    }

    public List<modelos.pojos.Reserva> listarReservas() {
        return ConsultarReservaCont.listarReservasPorCodigo("");
    }
    
    public List<modelos.pojos.Reserva> listarReservasCliente(){
        FacesContext facesContext = FacesContext.getCurrentInstance();
        UIViewRoot root = facesContext.getViewRoot();
        InputText caja = (InputText) root.findComponent("este").findComponent("cedSolicitante");
        String cedulaSolicitante = caja.getValue() + "";
        return ConsultarReservaCont.listarReservasPorCedula(cedulaSolicitante);
    }

    public void consultarReserva() {
        modelos.pojos.Reserva seleccion = (modelos.pojos.Reserva) tablaReservas.getRowData();
        reserva = ConsultarReservaCont.consultarReserva(seleccion.getCodigoReserva());
        indexC = 1;
    }
    
    public void actualizarReserva(){
        ModificarReservaCont.modificarReserva(reserva);
        FacesContext context = FacesContext.getCurrentInstance();
        context.addMessage(null, new FacesMessage("Cambio Realizado Exitosamente"));
    }
    
    public void desactivarReserva(){
        modelos.pojos.Reserva seleccion = (modelos.pojos.Reserva) tablaReservas.getRowData();
        reserva = ConsultarReservaCont.consultarReserva(seleccion.getCodigoReserva());
        reserva.setEstado(Utilidad.invertirEstado(seleccion.getEstado()));
        ModificarReservaCont.modificarReserva(reserva);
    }
    
    public void cancelarReserva(){
        log.info(reserva.getCodigoReserva());
        ModificarReservaCont.cancelarSolicitudReserva(reserva.getCodigoReserva());
    }

    public void irResumen() {
        index = 2;
    }
}
